ЪДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Name:   і L-SYSTEM PARSER/MUTATOR        і (C) RenderStar Technology BV. і
ГДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДВДДДДДДДВДДДДДДДДДДДДґ
і Author: і Laurens J. Lapre               і Version: і  3.0  і 1994-01-31 і
ГДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДБДДДДДДДБДДДДДДДДДДДДґ
і RenderStar Technology BV, Keizersgracht 448                              і
і 1016 GD Amsterdam, the Netherlands                                       і
і Fax (+31) 20 622 4939                                                    і
ГДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДґ
і Email:  і 2:283/203.8 fidonet і 'Lj Lapre' PCGnet і  ljlapre@hacktic.nl  і
АДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДЩ


Disclaimer :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
This software is free and may be freely distributed, but is copyrighted by 
the company RenderStar Technology BV. This software is provided as is 
without any guarantees. The author and company assume no liability for 
damages, direct or consequential, which may result from the use of this 
software. The 'lparser.exe' file may not be used as part of any commercial 
package without the explicit written consent of the author or company.


Execute like this :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
lparser [options] [name]

examples :

lparser -x rcylin -d lsys03.ls
lparser -vc -t0.5 -u10 -g lsys05
lparser -i2000 spider

Name is an l-system file with the ls extension. It will standard generate a 
RenderStar compatible 'output.vol' file. 

The standard output.vol file can be taken directly to the lviewer with the 
command : 'lviewer output'. See 'go.bat'. You will get some information about 
the loaded object and it will bring you into a standard VGA 640x480 16 color 
screen. Here you can rotate the object, zoom in/out and pan. For key usage 
see the lviewer.txt file.

It can also be rendered directly in RenderStar with the command 'rs2 l'.

The lparser.exe is a protected mode program using the royalty free 
Rational dos-extender (dos4gw.exe) supplied with Watcom. It needs a 
386/387 or 486 with 4meg ram.


Persistence of Vision (POV) output :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
Part off the POV file is setup by the user and the output.pov file is then
attached to the user's file.

-v        	make POV object file

Generates a POV file format description. Only the body part of the file is 
generated with a series of a l_base objects and leafs as triangles. One can 
change the object definition of the l_base element used in the l-system form 
to any one of the valid POV shapes as long as the shape can be scaled 
differently in all 3 directions. With POV 2 this can also be a sphere. 

The file 'setup1.pov' can be used to connect to the output.inc file created 
with lparser -vc. The first 8 colors in the pov rendering will then match the 
ones in the viewer.

-b        	make POV blob file

Instead of outputting objects, postionend components are written to the 
output.pov file. These can be used to create 'bloby' objects. All triangles 
are skipped.

The file 'setup2.pov' can be used to connect to the 'output.inc' file created 
with lparser -bc. 

-B        	make multiple POV blob files

Each color part of the final form is written into its own output?.pov file. 
This allows you to have mutiple blob's each with its own color and material.  
All triangles are skipped.

The file 'setup3.pov' can be used to connect to the 'output?.inc' files created 
with lparser -Bc. 

-c        	output inc files instead of POV file

The output files will now have the 'inc' extension for easier including in 
other POV files like 'setup.pov'.


DXF output :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
-d        	make dxf file

This creates AutoCad R12 polyline polyface meshes in dxf file format which 
can be used in Acad and 3DS. It's a much more efficient format than the 
3dface format. It uses blocks and inserts. The most efficient dxf file (in 
size and write/load time) is generated with : lparser -x cube -d [name]. If 
you read the file into Acad12 make sure you have a new (no prototype) drawing 
since the file contains block definitions as well. The objects will have 
color and layer attributes set. By changing all object color attributes to 
BYLAYER one can use the layer overview for easy, by layer, color setting.

-3        	make dxf file

This is a simple 3dface only dxf file format which will always work. It has 
no blocks or inserts but can become very large.


RAW output :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
-R        	make raw file

This is a simple ascii RAW file format, it can become very large. One triangle 
per line.


Other options :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
-s [num]  	set string size to [num] Kbytes

The -s option allows you to set the maximum size of the production string 
in Kbytes. This string has to be stored twice and is the main data 
structure. For a 4meg system the maximum will be about 1500 K. The default 
value is 1024 Kbytes (= 1 meg). This is to allow much larger strings to be 
processed on larger memory systems. 

-t [num]  	set minimum thickness

This allows you to set the minimum thickness a form will get during 
recursive generation. It is to make sure the forms don't get too 'thin' to 
be seen and render correctly. It's typicly around 0.5 to 1.0.

-u [num]  	mutate [num] times

Mutate the l-system a number of times before starting the geometry generation 
fase and write the mutated l-system to disc as the file 'mutation.ls'. By 
re-using this file one can build mutation series of forms. See 'mutate.bat'.

-r [num]  	overrule recursion depth 
-a [num]  	overrule angle

Overrule these values on the commandline. They are also set in the l-system 
file but they will not be used when an overrule option is used on the 
commandline. One can 'open' a form by starting with a angle of zero and 
increase it to the final angle. This makes nice animations. Doing the same 
with the -r option will slowly 'grow' the form into its final shape.

-p [num]  	limit polygons to [num]

Limit the total amount off polygons/objects outputed during the parsing of 
the final l-system production. After mutation the form may have grown very 
(VERY!) large. The whole form could be inserted in each of its branches ! 
The default limit is 500.000 polygons/objects.

-i              link base elements together

With this option you can use a connected 8 sided cylinder as a base shape. 
Works only with VOL, DXF and RAW output. It will connect the bottom part of 
the cylinder to a previous top part creating a tube like element. This is 
meant to be used with polygonal plant and tree forms.

-x [name]       use name.vol as base form

Instead of a simple block a special object (*.vol) can be used as a base 
element. Example forms are :

objects        polygons		description
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
min 		  2		only two faces in a cross
cube 		  6		block (default)	
cylin 		  8		open 8 sided cylinder 
cone 		 10		cone on 10 sided polygon
cylin8 		 20		closed 8 sided cylinder
cylin16 	 44		closed 16 sided cylinder
tube		 60		10 sided cylinder with round top 
ball		100 		sphere mesh
rcylin		174		closed cylinder with rounded edges

This is for generating VOL, DXF or RAW files only. Try : lparser -x ball 
lsys00. Just use the small vol files supplied with the parser for this 
purpose. Using larger lparser generated vol files may not work. The changing 
of the base forms for POV output is done by the user in the POV headers. See 
setup*.pov for examples.

-l        	show final L-string

Prints the l-system production to the screen. This is the final string which 
is then interpreted into a 3d form.

-e        	echo input L-system

Echos the ls file to the screen with the basic parameters while it's being 
readin. The screen feedback will be like in v2.0.

-g        	add ground plane

Adds a large ground plane (2 triangles) touching the lowest point of the 
form. This is for easy shadow projection and horizon.


More info ... 
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
The book 'Evolutionary Art and Computers' by S. Todd and W. Latham was used 
to base the genetic 3d form mutation principles on. In here you'll find a lot 
of interesting ideas on how to 'grow' and 'evolve' organic looking 3d forms 
of your own. ISBN 0-12-437185-X

The implemented l-system is based on the one described in the book : 'The 
Algorithmic Beauty of Plants' (ABOP) by P. Prusinkiewicz and A. Lindenmayer 
(this is where the 'L' from l-systems come from). If you want more 
information on making your own l-systems you'll want to check out this book. 
A lot can be done by changing the l-systems suplied with the parser and 
seeing for yourself what changes in the final form. ISBN 0-387-97297-8


Syntax and movement
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
For those who are already familiar with l-systems, here are the commands and 
their functions for this lparser's 'dialect'. All commands are 1 char only 
and simpler then for most lparsers. This is to keep them from getting 
'broken' by the mutation process and speeds up the parsing.

There is also the posibilty to add an argument to a command. Instead
off doing +++ one can do +(30) if the basic angle was 10 degrees. The 
argument can be a real value.

The tropism command will allow you to let gravity pull branches downward by 
adding a 't' element togeter with and 'F'. See the file 'tropism.ls' and 
'tree*.ls' for examples. When you are not sure about the current 'down' 
direction do a '$' command first. This will roll the turtle horizontal and 
make sure the current up vector is oriented in the positive z-axis direction.

The turtle will start at the origin with the Z-axis as forward direction and 
Y-axis as left direction. See the file 'axis.ls' for an detailed example. 
Here you can experiment with the basic orientations and see how the 3d 
turtle is using a 'right-handed' coordinate system. Use your right hand with 
your thumb as up, forefinger as forward and an other finger as left 
direction. 

By adding &(90) in front of an axiom the turtle axis will align with the 
right handed coordinate system used in the viewer. Adding an additional
+(90) will make it easier when working with 2d l-systems. See the
'fract*.ls' files for examples.

Values can have some randomness automaticly added to them. Using ~(xx) will 
now add a random direction component to the current orientation with maximum 
of xx in all three directions. This way you can mark at which locations in 
your l-system 'jitter' needs to be introduced. Using this option no two 
'intances' of the same l-system will look the same. See fern.ls for an 
example.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Turtle Orientation commands                                         і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і +	turn left around up vector				      і
і +(x)	turn x left around up vector				      і
і - 	turn right around up vector				      і
і -(x) 	turn x right around up vector				      і
і &	pitch down around left vector				      і
і &(x)	pitch x down around left vector				      і
і ^	pitch up around left vector				      і
і ^(x)	pitch x up around left vector				      і
і <	roll left (counter clockwise) around forward vector	      і
і <(x)	roll x left around forward vector			      і
і >	roll right (clockwise) around forward vector		      і
і >(x)	roll x right around forward vector			      і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Special Orientation commands                                        і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і |	turn 180 deg around up vector				      і
і %	roll 180 deg around forward vector			      і
і $	roll until horizontal 					      і
і ~	turn/pitch/roll in a random direction			      і
і ~(x)	      "     in a random direction with a maximum of x degrees і
і t	correction for gravity with 0.2			              і
і t(x)	correction for gravity with x			              і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Movement commands		      	     when {} active	      і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і F	move forward and draw full length    record vertex	      і
і F(x)	move x forward and draw              record vertex	      і
і Z	move forward and draw half length    record vertex	      і
і Z(x)	move x forward and draw              record vertex	      і
і f	move forward with full length	     record vertex 	      і
і f(x)	move x forward           	     record vertex 	      і
і z	move forward with half length	     record vertex	      і
і z(x)	move x forward                       record vertex	      і
і g	move forward with full length	     don't record vertex      і
і g(x)	move x forward        	             don't record vertex      і
і .	don't move			     record vertex            і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Structure commands						      і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і [	push current state					      і
і ]	pop current state					      і
і {	start polygon shape					      і
і }	end polygon shape					      і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Inc/Dec commands						      і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і "	increment length with 1.1				      і
і '	decrement length with 0.9				      і
і "(x)	multiply length with x also '(x)			      і
і ;	increment angle	with 1.1				      і
і :	decrement angle with 0.9				      і
і :(x)	multiply angle with x also ;(x)				      і
і ?	increment thickness with 1.4				      і
і !	decrement thickness with 0.7				      і
і ?(x)	multiply thickness with x also !(x)			      і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і Additional commands						      і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і c	increment color index					      і
і c(x)	set color index to x					      і
і *	reset color, thickness, length and angle		      і
і @	end of object						      і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ


LS files based on 'The Algorithmic Beauty of Plants' :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
bop00.ls      	cordate leave 	  	ABOP pag 123
bop01.ls      	plant		  	ABOP pag 27
bop02.ls      	bush		  	ABOP pag 26
bop03.ls      	form in 2d	  	ABOP pag 25
bop04.ls      	block form	  	ABOP pag 20
bop05.ls      	fractal		  	ABOP pag 9
bop06.ls    	dragon curves     	ABOP pag 9

bop07.ls    	compound leave    	ABOP pag 130
bop08.ls    	compound leave in 3d	ABOP pag 129
bop09.ls    	maple like leave	ABOP pag 129
bop10.ls    	nested polygon leaves   ABOP pag 127

tree00.ls	monopodial tree	  	ABOP page 56
tree01.ls	monopodial tree	  	ABOP page 56
tree02.ls	ternary tree	  	ABOP page 60


Free form experiments and other fractals :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
lsys00.ls     	lobster form
lsys01.ls     	   "	var 1
lsys02.ls     	   "	var 2
lsys03.ls     	   "	var 3
lsys04.ls     	   "	var 4
lsys05.ls     	spiral bush
lsys06.ls     	tree base
lsys07.ls     	half circle
lsys08.ls     	   "	var 1
lsys09.ls     	cello plant
lsys10.ls     	circle form

spiral00.ls   	overview of spiral types
spiral01.ls   	spiral form
spiral02.ls   	spiral tree
spiral03.ls   	large spiral plant var 1
spiral04.ls   	large spiral plant var 2

tree03.ls       willow type tree
tree04.ls       conifer type tree
tree05.ls	'best' tree
tree06.ls	conifer type tree
tree07.ls	tropism experiment
tree08.ls	'palm' tree based on bop07.ls structure
tree09.ls	'Trail off trees' showing the different growth stages
tree10.ls	leavy ternary tree type
tree11.ls	elaboration on tree08
street1.ls	a series of trees
flower.ls	cordate leave arangement
fern.ls		fern plant
leaves.ls	variation on bop00.ls

fract*.ls    	L-systems from FractInt

shell*.ls	shell type forms based on spirals and bop10.ls

airhorse.ls	part seahorse but with external lung
dinofly.ls	what would this be without a dino ?
spider.ls	octo-spider


Ls-files by Cees van der Mark
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
passie.ls	a passion flower plant
leaf01.ls	variation on bop00.ls
plant01.ls	two plants winding around a stalk
hangpl.ls       crystal with leaves


Thanks to :
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД 
C.J.van der Mark [2:283/203.11 fidonet, 9:580/203.11 PCGnet] for testing all 
versions, feedback and working on the various formats.

BBS Bennekom [2:283/203 fidonet, 9:580/203 PCGnet] for acting as go-between.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД